/*
 * @Description: 用户相关服务
 * @Author: Junhuang
 * @Date: 2022-02-09 12:20:03
 * @LastEditTime: 2022-04-09 18:54:26
 * @LastEditors: Junhuang
 * @Reference:
 */
'use strict';

const Service = require('egg').Service;
const crypto = require('crypto');

class UserService extends Service {
  // 用户是否存在
  async exist(user_id) {
    const { app } = this;
    return await app.model.User.findOne({
      where: {
        id: user_id,
      },
    });
  }

  // 指定用户关注人数
  async getFollowCount(user_id) {
    return this.app.model.Follow.count({
      where: {
        user_id,
      },
    });
  }

  // 指定用户粉丝人数
  async getFanCount(user_id) {
    return this.app.model.Follow.count({
      where: {
        follow_user_id: user_id,
      },
    });
  }

  // 指定用户的作品量
  async getVideoCount(user_id) {
    return this.app.model.Video.count({
      where: {
        user_id,
      },
    });
  }

  // 是否关注某人
  // user_id : 为动作的发起者，
  // follow_user_id: 为被关注的人
  async isFollow(user_id, follow_user_id) {
    return !!(await this.app.model.Follow.findOne({
      where: {
        user_id,
        follow_user_id,
      },
    }));
  }

  // 用户相关信息
  async getUserInfo(user_id) {
    return await this.app.model.User.findOne({
      where: {
        id: user_id,
      },
      attributes: {
        exclude: [ 'password' ],
      },
    });
  }

  /**
   * @param {String} password 密码明文
   * @param {String} hashPassword 密码密文
   * @return {Boolean} 返回是否相同
   */
  checkPassword(password, hashPassword) {
    const hmac = crypto.createHash('sha256', this.app.config.crypto.secret);
    hmac.update(password);
    const hp = hmac.digest('hex');
    return (hp === hashPassword);
  }

}

module.exports = UserService;
